package co.edu.ucatolica.sislab.persistence.utils;

import org.slf4j.Logger;

import co.edu.ucatolica.sislab.persistence.DatabaseException;
import co.edu.ucatolica.sislab.persistence.DatabasePersistorHelper;

/**
 * Se encarga de manejar las operaciones de cierre y rollback sobre Base de datos en caso de
 * excepcion
 *
 */
public class UtilsDataBaseExceptions {
	/**
	 * Cierra las conexiones a Base de datos
	 * @param logger Logger asociado
	 * @param transactionNumber Transaccion asociada
	 */
	public static void closeDatabaseConnection(Logger logger, long transactionNumber) {
		try {
			DatabasePersistorHelper.closeConnection(transactionNumber);
		} catch ( DatabaseException e2 ) {
			logger.error("Error en la tabla " + e2.getTable() + " en la operacion " + e2.getOperation() + " :" + e2.getMessage() );
		}
	}

	/**
	 * Realiza un rollback sobre las operaciones de bd de Base de datos
	 * @param logger Logger asociado
	 * @param transactionNumber Transaccion asociada
	 * @param e Excepcion generada
	 */
	public static void generateDatabaseRollBack(Logger logger, long transactionNumber, DatabaseException e) {
		logger.error("Error en la tabla " + e.getTable() + " en la operacion " + e.getOperation() + " :" + e.getMessage() );
		try {
			DatabasePersistorHelper.rollback(transactionNumber);
		} catch ( DatabaseException e2 ) {
			logger.error("Error en la tabla " + e2.getTable() + " en la operacion " + e2.getOperation() + " :" + e2.getMessage() );
		}
	}
	
	/**
	 * Realiza un rollback sobre las operaciones de bd de Base de datos
	 * @param logger Logger asociado
	 * @param transactionNumber Transaccion asociada
	 * @param e Excepcion generada
	 */
	public static void generateDatabaseRollBack(Logger logger, long transactionNumber, Exception e) {
		logger.error("Error externo a Base de datos " + e.getMessage() );
		try {
			DatabasePersistorHelper.rollback(transactionNumber);
		} catch ( DatabaseException e2 ) {
			logger.error("Error en la tabla " + e2.getTable() + " en la operacion " + e2.getOperation() + " :" + e2.getMessage() );
		}
	}
}
